package services;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Random;

public class GeneralFunctions {
	
	private static String pathToImages = null;
	
	private static Random randomGenerator = null;

	/**
	 * Функция, возвращающая путь к папке с изображениями на сервере.
	 */
	public static String getPathToImages() {
		if (pathToImages == null) {
			//String catalina = System.getenv("CATALINA_HOME");  // it's for Windows
			String path = System.getenv("PATH");
			String[] stringArray = path.split(":");
			String catalina = null;
			for (String string : stringArray) if (string.contains("tomcat")) { catalina = string; break; }
			if (catalina == null) {
				// We are in Eclipse. Path to "secret folder".
				pathToImages = "C:/kursach/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/online_editor/images/";
			} else {
				// We are not in Eclipse, but on real server. Path to server folder.
				pathToImages = catalina + "/webapps/online_editor/images/";
			}
		}
		return pathToImages;
	}
	
	/**
	 * Функция для генерации случайного имени файла.
	 * 
	 * @return  Сгенерированное имя типа String.
	 */
	public static String generateName() {
		if (randomGenerator == null) {
			randomGenerator = new Random();
		}
		return String.valueOf(System.currentTimeMillis()) + String.valueOf(-Math.abs(randomGenerator.nextLong()));
	}

	/**
	 * Простая функция для удаления ненужных и временных изображений с диска.
	 * 
	 * @param name - имя файла изображения без пути и расширения.
	 */
	public static void deleteImage(String name) {
		if (name != null) {
			File file = new File(getPathToImages() + name + ".png");
			file.delete();
		}
	}
	
	/**
	 * Функция, копирующая файл с изображением.
	 * 
	 * @param sourceName - имя существующего файла изображения без пути и расширения;
	 * @param destinationName - имя создаваемого файла изображения без пути и расширения.
	 */
	public static void cloneImage(String sourceName, String destinationName) {
		try {
			File f1 = new File(getPathToImages() + sourceName + ".png");
			File f2 = new File(getPathToImages() + destinationName + ".png");
			InputStream in = new FileInputStream(f1);
			OutputStream out = new FileOutputStream(f2);

			byte[] buf = new byte[1024];
			int len;
			while ((len = in.read(buf)) > 0) out.write(buf, 0, len);

			in.close();
			out.close();
		} catch (FileNotFoundException ex) {
			System.out.println(ex.getMessage() + " in the specified directory.");
			System.exit(0);
		} catch (IOException e) {
			System.out.println(e.getMessage());
		}
	}

}
